From: Jason Andryuk Date: Fri, 16 May 2014 20:48:16 +0000 (-0400) Subject: libvchan: Make raw_get_{data_ready, buffer_space} match X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4934 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=821096dd8acc4b5ba32f942e3daf9ff2b928ce09;p=xen.git libvchan: Make raw_get_{data_ready, buffer_space} match For writing into a vchan, raw_get_buffer_space used >, allowing the full ring size to be written. On the read side, raw_get_data_ready compared the ring size with >=. This mismatch means a completely filled buffer cannot be read. Fix this by making the size checks identical. Signed-off-by: Jason Andryuk Acked-by: Ian Campbell --- diff --git a/tools/libvchan/io.c b/tools/libvchan/io.c index 804c63cca7..6e6e2395df 100644 --- a/tools/libvchan/io.c +++ b/tools/libvchan/io.c @@ -118,7 +118,7 @@ static inline int send_notify(struct libxenvchan *ctrl, uint8_t bit) static inline int raw_get_data_ready(struct libxenvchan *ctrl) { uint32_t ready = rd_prod(ctrl) - rd_cons(ctrl); - if (ready >= rd_ring_size(ctrl)) + if (ready > rd_ring_size(ctrl)) /* We have no way to return errors. Locking up the ring is * better than the alternatives. */ return 0;